package com.dtx.visitor;

/**
 * Main类与Composite模式的Main类基本相同。不同之处仅仅在于,本章中的Main类使用了访问者ListVisitor类的实例来显示Directory中的内容。
 * 在Composite模式中,我们调用printList方法来显示文件夹中的内容。该方法已经在Directory类(即表示数据结构的类)中被实现了。
 * 与之相对,在Visitor模式中是在访问者中显示文件夹中的内容。这是因为显示文件夹中的内容也属于数据结构中的各元素进行的处理。
 */
public class VisitorMain {

    public static void main(String[] args) {
        try {
            System.out.println("Making root entries..............");
            Directory rootDir = new Directory("root");
            Directory binDir = new Directory("bin");
            Directory tmpDir = new Directory("tmp");
            Directory usrDir = new Directory("usr");
            rootDir.add(binDir);
            rootDir.add(tmpDir);
            rootDir.add(usrDir);
            binDir.add(new File("vi",10000));
            binDir.add(new File("latex",20000));
            rootDir.accept(new ListVisitor());

            System.out.println("");
            System.out.println("Making user entries ..................");
            Directory yuki = new Directory("yuki");
            Directory hanako = new Directory("hanako");
            Directory tomura = new Directory("tomura");
            usrDir.add(yuki);
            usrDir.add(hanako);
            usrDir.add(tomura);
            yuki.add(new File("diary.html",100));
            yuki.add(new File("Composite.java",200));
            hanako.add(new File("memo.tex",300));
            tomura.add(new File("game.doc",400));
            tomura.add(new File("junk.mail",500));
            rootDir.accept(new ListVisitor());
        } catch (FileTreatmentException e) {
            e.printStackTrace();
        }
    }


}
